package controllers

import (
	"fmt"
	"strconv"
	"time"
	models "yun/Models"

	"github.com/gin-gonic/gin"
)

type ApiUserController struct {
	ApiBaseController
}
type Goodsselect struct {
	Limit     string `json:"limit"`
	Page      string `json:"page"`
	Type      string `json:"type"`
	GoodsName string `json:"goods_name"`
}
type Goodsinfo struct {
	GoodsName string `json:"goods_name"`
}

// 获取用户信息
func (a ApiUserController) Usercenter(c *gin.Context) {
	// 从上下文中获取用户信息
	if userInfo, ok := c.Get("userInfo"); ok {
		c.JSON(200, gin.H{
			"data": userInfo,
			"code": "1",
		})
	} else {
		c.JSON(200, gin.H{
			"msg":  "请求失败",
			"code": "0",
		})
	}
}

// 用户上传商品信息
func (a ApiUserController) Useringoods(c *gin.Context) {
	userInfo, _ := c.Get("userInfo")
	v, ok := userInfo.(models.User)
	if ok {
		user_id := v.Id
		goods := models.Goods{}
		if c.PostForm("goods_name") == "" {
			c.JSON(200, gin.H{
				"msg":  "请上传商品名称",
				"code": "0",
			})
			return
		}
		add := map[string]interface{}{
			"GoodsName": c.PostForm("goods_name"),
			"InTime":    c.DefaultPostForm("in_time", "0"),
			"BaoDay":    c.DefaultPostForm("bao_day", "0"),
			"DaoTime":   c.DefaultPostForm("dao_time", "0"),
			"Content":   c.DefaultPostForm("content", ""),
			"UserId":    user_id,
		}
		// 修改
		if c.PostForm("id") != "" {
			res := db.Model(&goods).Where("id = ?", c.PostForm("id")).Updates(add)
			if res.RowsAffected > 0 {
				c.JSON(200, gin.H{
					"msg":  "修改成功",
					"code": "1",
				})
				return
			}
		} else {
			// 创建
			res := db.Model(&goods).Create(add)
			if res.RowsAffected > 0 {
				c.JSON(200, gin.H{
					"msg":  "添加成功",
					"code": "1",
				})
				return
			}
		}
	}
	// 公共返回
	c.JSON(200, gin.H{
		"msg":  "请求失败",
		"code": "0",
	})

}

// 查询用户商品信息
func (a ApiUserController) Goodslist(c *gin.Context) {
	userInfo, _ := c.Get("userInfo")
	v, ok := userInfo.(models.User)
	if ok {
		limit, err := strconv.Atoi(c.DefaultPostForm("limit", "10"))
		if err != nil {
			limit = 10
		}
		page, err := strconv.Atoi(c.DefaultPostForm("page", "1"))
		if err != nil {
			page = 1
		}
		goodsdb := db
		user_id := v.Id
		goods := []models.Goods{}
		goodswhere := map[string]interface{}{
			"user_id":  user_id,
			"del_time": 0,
		}
		goodsdb = goodsdb.Where(goodswhere)
		if c.PostForm("goods_name") != "" {
			goodsdb = goodsdb.Where("goods_name LIKE ?", fmt.Sprintf("%%%s%%", c.PostForm("goods_name")))
		}
		daotype := c.PostForm("type")
		if daotype == "2" {
			// 未到期
			goodsdb = goodsdb.Where("dao_time > ?", time.Now().Unix())
		} else if daotype == "3" {
			// 已到期
			goodsdb = goodsdb.Where("dao_time <= ?", time.Now().Unix())
		}
		goodsdb.Limit(limit).Offset((page - 1) * limit).Find(&goods)
		c.JSON(200, gin.H{
			"data":    goods,
			"user_id": user_id,
			"code":    "1",
		})
		return
	}
	// 公共返回
	c.JSON(200, gin.H{
		"msg":  "请求失败",
		"code": "0",
	})
}

// 删除商品信息
func (a ApiUserController) Delgoods(c *gin.Context) {
	userInfo, _ := c.Get("userInfo")
	v, ok := userInfo.(models.User)
	if ok {
		user_id := v.Id
		goods := []models.Goods{}
		res := db.Model(&goods).Where("user_id = ? AND del_time = ? AND id = ?", user_id, "0", c.PostForm("goods_id")).Update("del_time", time.Now().Unix())
		if res.RowsAffected > 0 {
			c.JSON(200, gin.H{
				"msg":  "删除成功",
				"code": "1",
			})
			return
		} else {
			c.JSON(200, gin.H{
				"msg":  "删除失败",
				"code": "1",
			})
			return
		}
	}
}
